using CustomItemLib;
using UnityEngine;
using LocalizationLib;

namespace AdvancedGraphicsCards
{
    public class ModBehaviour : Duckov.Modding.ModBehaviour
    {
        // 显卡数据定义（从配置文件加载）
        private GraphicsCardData[] graphicsCards = System.Array.Empty<GraphicsCardData>();

        private bool isInitialized = false;

        public ModBehaviour()
        {
        }


        void Awake()
        {
            Debug.LogWarning("[AdvancedGraphicsCards] 警告：ModBehaviour Awake 被调用");
#if DEBUG
            if (GetComponent<Test>() == null)
            {
                gameObject.AddComponent<Test>();
                Debug.Log("[AdvancedGraphicsCards] 已添加测试组件");
            }
#endif
        }

        void OnEnable()
        {
            Debug.LogWarning("[AdvancedGraphicsCards] 警告：ModBehaviour OnEnable 被调用");
            Debug.Log("[AdvancedGraphicsCards] Mod OnEnable 被调用");
            // 注册Mod类型到本地化系统
            ModTypeProvider.RegisterModType(typeof(ModBehaviour));
        }

        // 在Mod设置完成后调用，这是注册物品的最佳时机
        // 必须在这里注册物品，否则游戏加载存档时会找不到物品的 prefab
        protected override void OnAfterSetup()
        {
            Debug.LogWarning("[AdvancedGraphicsCards] 警告：ModBehaviour OnAfterSetup 被调用");
            Debug.Log("[AdvancedGraphicsCards] Mod OnAfterSetup 被调用");

            if (!isInitialized)
            {
                Debug.Log("[AdvancedGraphicsCards] 开始初始化显卡注册表...");

                // 初始化注册表
                CustomItemRegistry.Instance.Initialize();

                // 一站式加载并注册
                int registeredCount = CustomItemFactory.LoadAndRegister<GraphicsCardData, GraphicsCardPropertyProvider>(
                    CustomItemRegistry.Instance,
                    info.path,
                    "GraphicsCards",
                    new GraphicsCardPropertyProvider()
                );
                

                // 保存加载的数据供测试使用（可选）
                graphicsCards = CustomItemFactory.LoadFromJson<GraphicsCardData>(
                    info.path,
                    "GraphicsCards"
                ) ?? System.Array.Empty<GraphicsCardData>();

                isInitialized = true;
                Debug.Log($"[AdvancedGraphicsCards] Mod 加载成功！已注册 {registeredCount} 个显卡物品。");
            }
        }


        // 在Mod停用前调用
        protected override void OnBeforeDeactivate()
        {
            Debug.LogWarning("[AdvancedGraphicsCards] 警告：ModBehaviour OnBeforeDeactivate 被调用");
            Debug.Log("[AdvancedGraphicsCards] Mod OnBeforeDeactivate 被调用");
            // 清理已注册的物品
            CustomItemRegistry.Instance.Uninitialize();
        }

        // 获取显卡数据数组（供测试使用）
        public GraphicsCardData[] GetGraphicsCardsData()
        {
            Debug.LogWarning("[AdvancedGraphicsCards] 警告：ModBehaviour GetGraphicsCardsData 被调用");
            return graphicsCards;
        }

        void OnDestroy()
        {
            Debug.LogWarning("[AdvancedGraphicsCards] 警告：ModBehaviour OnDestroy 被调用");
            // Mod 卸载时清理已注册的物品
            Debug.Log("[AdvancedGraphicsCards] Mod 正在卸载...");
            CustomItemRegistry.Instance.Uninitialize();
            Debug.Log("[AdvancedGraphicsCards] Mod 已卸载。");
        }
    }
}